<?php

namespace Modules\Auth\Http\Requests\Teacher;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\Password;
use Modules\Personnel\Entities\Department;

class AuthRequest extends FormRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        switch (true) {
            case $this->routeIs('api.teacher.auth.login'):
                // case true:
                //@
                return [
                    'username' => ['required', 'string', 'between:2,16'],
                    'password' => [
                        'required', 'string', 'between:6,16',
                        Password::min(6)
                        // ->letters()//使密码至少需要一个字母。
                        // ->numbers()//使密码至少需要一个数字。
                        // ->mixedCase()//使密码至少需要一个大写和一个小写字母。
                        // ->symbols()//使密码至少需要一个符号。
                        // ->uncompromised()//确保密码没有在数据泄露中被泄露。 //检测到此密码容易被破解，请重设
                    ],
                ];
            case $this->routeIs('api.teacher.auth.sso'):
                // case true:
                //@
                return [
                    'token' => ['required', 'string']
                ];
            case $this->routeIs('api.teacher.auth.changePassword'):
                return [
                    'department_id' => ['nullable', Rule::exists(Department::getTableName(), 'id')],
                    'password' => [
                        'required', 'string', 'between:4,16',
                        Password::min(6)
                            ->letters() //使密码至少需要一个字母。
                            ->numbers() //使密码至少需要一个数字。
                            ->mixedCase() //使密码至少需要一个大写和一个小写字母。
                            ->symbols() //使密码至少需要一个符号。
                        // ->uncompromised() //确保密码没有在数据泄露中被泄露。 //检测到此密码容易被破解，请重设
                    ],
                    'password_confirmation' => [
                        'required', 'same:password',
                        Password::min(6)
                            ->letters() //使密码至少需要一个字母。
                            ->numbers() //使密码至少需要一个数字。
                            ->mixedCase() //使密码至少需要一个大写和一个小写字母。
                            ->symbols() //使密码至少需要一个符号。
                        // ->uncompromised() //确保密码没有在数据泄露中被泄露。 //检测到此密码容易被破解，请重设
                    ],
                ];
        }
        return [
            //
        ];
    }

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }
}
